package com.itlong.cloud.app.service;

import com.itlong.cloud.POJO.DTO.app.AppAuthPersonGetRoomInfoDTO;
import com.itlong.cloud.POJO.DTO.app.AppGetAuthPersonPageDTO;
import com.itlong.cloud.POJO.DTO.app.AppMineAuthPersonExtendDTO;
import com.itlong.cloud.POJO.PO.AppTempSaveMessagePO;
import com.itlong.cloud.POJO.PO.AppUserInfoPO;
import com.itlong.cloud.POJO.VO.app.*;
import com.itlong.cloud.utils.page.Page;

import java.text.ParseException;
import java.util.List;
import java.util.Map;


/**
 * <desc>
 *     新版APP的我的版块服务层接口
 * </desc>
 *
 * @createDate 2017/10/10
 */
public interface IAppMineService {

    /**
     * <desc>
     *      注销账号
     * </desc>
     *
     * @param userId
     * @author Jiaqi.X
     * @createDate 2020/06/01
     */
    void logOff(String userId) throws Exception;

    /**
     * <desc>
     *     APP端_我的,退出登录
     * </desc>
     * @param userId
     * @return
     * @createDate 2017/10/10
     * @author cuiduanwu
     */
    boolean logOut(String userId) throws Exception;

    /**
     * <desc>
     *     APP端_我的,更新头像
     * </desc>
     * @param userId
     * @param imageStr
     * @param imageType
     * @return
     * @createDate 2017/10/10
     * @author cuiduanwu
     */
    String updatePhoto(String userId,String imageStr,String imageType) throws  Exception;
    /**
     * <desc>
     *     APP端_我的,更新昵称
     * </desc>
     * @param userId
     * @param nickName
     * @return
     * @createDate 2017/10/10
     * @author cuiduanwu
     */
    boolean updateNickName(String userId,String nickName);

    /**
     * <desc>
     *     APP端_我的,更新性别
     * </desc>
     * @param userId
     * @param sex
     * @return
     * @createDate 2017/10/10
     * @author cuiduanwu
     */
    boolean updateSex(String userId,String sex);

    /**
     * <desc>
     *     APP端_我的版块,新增意见反馈
     * </desc>
     * @param userId
     * @param projectId
     * @param feedBackInfo
     * @return
     * @author cuiduanwu
     * @createDate 2017/10/10
     */
    boolean addFeedBackInfo(String userId,String projectId,String feedBackInfo,
                            String problemType, String appVersion, String androidVersion, String phoneModel,
                            String contactInformation, String imageUrlStr, String netType, String systemName) throws  Exception;


    /**
     * <desc>
     *     APP端_我的,更新密码
     * </desc>
     * @param userId
     * @param oldPswd 加密后的旧密码
     * @param currentPswd 加密后的新密码
     * @return
     * @author cuiduanwu
     * @createDate 2017/10/11
     */
    boolean updatePswd(String userId,String oldPswd,String currentPswd);


     /**
      * <desc>
      *      获取授权人列表信息。
      * <desc/>
      *
      * @param pageDTO 分页查询请求参数
      * @return 
      * @author shengen.T
      * @createDate 2017/11/10
      */
    Page<AppMineGetAuthPersonPageVO> getAuthPersonPage(AppGetAuthPersonPageDTO pageDTO) throws Exception;

     /**
      * <desc>
      *      获取被授权人的房间列表信息。
      * <desc/>
      *
      * @param  pageDTO
      * @return
      * @author shengen.T
      * @createDate 2018-01-23
      */
     List<AppMineGetAddressInfoVO> getAuthPersonRoomInfo(AppAuthPersonGetRoomInfoDTO pageDTO) throws Exception;



     /**
      * <desc>
      *      添加授权人信息。
      * <desc/>
      *
      * @param  savDTO 请求参数
      * @return 返回授权人列表信息
      * @author shengen.T
      * @createDate 2017/11/13
      */
     Map<String, Object> addAuthPerson(AppMineAuthPersonExtendDTO savDTO) throws Exception;


    /**
     * <desc>
     *      添加授权人跟项目，房间，权限关系信息。
     * <desc/>
     *
     * @param saveDTO 授权用户信息参数
     * @return
     * @author shengen.T
     * @createDate 2017/11/14
     */
//    Map<String, Object> addAuthPersonInfo(AppMineAuthPersonExtendDTO saveDTO) throws Exception;

     /**
      * <desc>
      *      删除被授权的人。
      * <desc/>
      *
      * @param  parentUserId 业主的用户ID
      * @param  authPhoneNo 被授权的手机号
      * @param  projectId 项目编号
      * @return 返回影响行数
      * @author shengen.T
      * @createDate 2017/11/15
      */
    boolean deleteAuthPerson(String parentUserId,String authPhoneNo,String projectId) throws Exception;

    /**
     * <desc>
     *      获取用户二维码
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/15
     */
    AppGetQrcodeVO getUserQrcode(String projectId,String userId,String roomId) throws ParseException;
     /**
      * <desc>
      *      更新授权人的备注。
      * <desc/>
      *
      * @param authPhoneNo 授权手机号
      * @param projectId 项目编号
      * @param parentUserId 业主ID
      * @param userRemarks 备注
      * @return
      * @author shengen.T
      * @createDate 2017/11/15
      */
    Integer updateUserRemarks(String authPhoneNo,String projectId,String parentUserId,String userRemarks) throws Exception;


     /**
      * <desc>
      *      更新家人的开门密码。
      * <desc/>
      *
      * @param userId 用户编号
      * @param projectId 项目编号
      * @param openPwd 开门密码
      * @return
      * @author shengen.T
      * @createDate 2017-12-07
      */
     boolean updateUserRoomOpenPwd(String userId,String projectId,String openPwd) throws Exception;

      /**
       * <desc>
       *      获取房间的入住人数
       * <desc/>
       *
       * @param  userId 用户ID
       * @param  projectId  项目编号
       * @param  roomId 房间编号
       * @return
       * @author shengen.T
       * @createDate 2018-01-10
       */
     Integer getUserRoomCount(String userId,String projectId,String roomId) throws Exception;

    /**
     * <desc>
     *      根据手机号查询用户信息
     * <desc/>
     *
     * @param  phoneNo 授权人手机号
     * @return
     * @author shengen.T
     * @createDate 2018-01-10
     */
    AppUserInfoPO getUserInfoByPhoneNo(String phoneNo) throws Exception;

     /**
      * <desc>
      *     跟据项目编号获取最大授权数。
      * <desc/>
      *
      * @param  projectId 项目编号
      * @return
      * @author shengen.T
      * @createDate 2018-01-10
      */
    Integer getMaxAuthNum(String projectId) throws Exception;

    /**
     * <desc>
     *      获取房间名称。
     * <desc/>
     *
     * @param roomId 房间编号
     * @param projectId 项目编号
     * @return
     * @author shengen.T
     * @createDate 2017-12-14
     */
    String getRoomName(String projectId, String roomId) throws Exception;

    /**
     * <desc>
     *      获取用户在该项目该业主下是否授权过房间的数目。
     * <desc/>
     *
     * @param  parentUserId 业主ID
     * @param  userId 用户ID
     * @param  projectId 项目ID
     * @return
     * @author shengen.T
     * @createDate 2017/11/23
     */
    Integer getUserAuthRelationCount(String parentUserId,String userId,String projectId) throws Exception;


     /**
      * <desc>
      *      获取APP用户项目关系表的状态。
      * <desc/>
      *
      * @param  userId
      * @param  projectId
      * @return
      * @author shengen.T
      * @createDate 2018-01-16
      */
    Integer getAppUserProjectStatus(String userId,String projectId) throws Exception;


    /**
     * <desc>
     *      用户是否是vip
     * <desc/>
     *
     * @param  userId
     * @param  projectId
     * @return
     * @author pengwei
     * @createDate 2020-11-12
     */
    boolean appUserIsVip(String userId,String projectId) throws Exception;

    /**
     * <desc>
     *      获取项目状态。
     * <desc/>
     *
     * @param  projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019-01-07
     */
    String getProjectStatus(String projectId) throws Exception;

     /**
      * <desc>
      *      获取业主拥有权限的房间列表ID。
      * <desc/>
      *
      * @param userId 用户ID
      * @param projectId 项目ID
      * @return
      * @author shengen.T
      * @createDate 2018-02-02
      */
    List<String> getOwnerRoomInfoLists(String userId, String projectId) throws Exception;


    /**
     * <desc>
     *      获取审核通过的房间列表。
     * <desc/>
     *
     * @param  projectId
     * @param  userId
     * @param  pageNum
     * @return
     * @author shengen.T
     * @createDate 2018-03-26
     */
    Page<AppPassRoomListVO> getPassRoomList(String projectId, String userId, String pageNum) throws Exception;

    /**
     * <desc>
     * 保存app端监听linPhone状态的数据
     * <desc/>
     *
     * @param message linPhone状态的数据
     * @return
     * @author Juguang.S
     * @createDate 2018/05/08
     */
    void saveMessage(String message,String phoneNum) throws Exception;

    /**
     * <desc>
     *  根据时间或手机号查询linPhone状态的数据
     * <desc/>
     *
     * @param findTime 传入查询时间
     * @param phoneNum 传入查询手机号
     * @return MessageVO 标准格式化响应结果
     * @author Juguang.S
     * @createDate 2018/05/08
     */
    List<AppTempSaveMessagePO> findMessageBytime(String findTime,String phoneNum) throws Exception;

    /**
     * <desc>
     *      获取用户人脸创建信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Qiang.S
     * @createDate 2018/05/08
     */
    AppUserFaceVO getCreateBaiduFaceInfo(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      修改用户手机
     * </desc>
     *
     * @param userId 用户id
     * @param newPhoneNo 新手机号
     * @return
     * @author Qiang.S
     * @createDate 2018/07/03
     */
    Integer updateUserPhone(String userId, String newPhoneNo) throws Exception;

    /**
     * <desc>
     *      因集成灵云快智需要，需将旧数据用户的SIP账号长度改为31位，并创建及绑定灵云快智用户账号，前端移动端无需调此接口
     *      还需将用户信息推送给所有的云对讲设备
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2018-08-24
     */
    void updateSipAccount() throws Exception;

    /**
     * <desc>
     *      推送开启云对讲服务的项目设备重启指令
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019-01-03
     */
    void pushCommand() throws Exception;

    /**
     * <desc>
     *      因集成灵云快智测试需要，根据userId释放灵云快智账号，前端移动端无需调此接口
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2018-09-11
     */
    void dropSipAccount() throws Exception;

    /**
     * <desc>
     *      补救批量给旧数据绑定灵云快智账号时遗漏账号的操作
     * <desc/>
     *
     * @param  phoneNum 手机号 如有值则创建此手机号的灵云快智账号，如无值则处理所有遗漏创建灵云快智的情况
     * @return
     * @author Juguang.S
     * @createDate 2018-10-15
     */
    void remedySipAccount(String phoneNum) throws Exception;

    /**
     * <desc>
     *      由账单id查询项目微信公众号appId
     * <desc/>
     *
     * @return 项目微信公众号appId
     * @author wangzhi
     * @createDate 2019/10/23
     */
    Map<String, Object> getAppIdByBillId(String billId) throws Exception;

    /**
     * <desc>
     *      sdk删除用户信息
     * <desc/>
     *
     * @param userId 用户id
     * @return
     * @author Qiang.S
     * @createDate 2020/07/02
     */
    void logOffUserForSDK(String userId) throws Exception;

    /**
     * <desc>
     *      物业注销该项目下的人脸信息
     * <desc/>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2021/04/20
     */
    void logOffUserForProperty(String userId,String projectId) throws Exception;


    /**
     * <desc>
     *      获取历史反馈列表
     * </desc>
     *
     * @param userId 用户id列表
     * @param projectId 项目id
     * @return
     * @Author Zhu.yj
     * @createDate  2020/11/12
     */
    List<AppFeedbackInfoVO> getFeedbackList(String userId, String projectId, String page) throws Exception;


    /**
     * <desc>
     *      获取历史反馈列表
     * </desc>
     *
     * @param feedbackId 用户id列表
     * @return
     * @Author Zhu.yj
     * @createDate  2020/11/12
     */
    AppFeedbackInfoVO getFeedbackDetail(String feedbackId) throws Exception;
    
    /**
     * <desc>
     *      京东非标-注销用户
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @Author Zhu.yj
     * @createDate  2020/12/17
     */
    void logOffUserForJdSdk(String userId, String projectId) throws Exception;
}
